package br.ufpb.di.ppgi.persistencia.iquery;

import java.util.List;

import br.ufpb.di.ppgi.negocio.modelo.defesa.Defesa;
import br.ufpb.di.ppgi.negocio.modelo.defesa.DefesaStatus;
import br.ufpb.di.ppgi.negocio.modelo.homologacao.defesa.HomologacaoDefesa;
import br.ufpb.di.ppgi.negocio.modelo.professorExterno.ProfessorExterno;
import br.ufpb.di.ppgi.negocio.modelo.usuario.Usuario;
import br.ufpb.di.ppgi.persistencia.pagination.HibernateQueryPagedList;

public interface IDefesaQuery extends IQuery {

	public abstract List<Defesa> listByOrientadorId(Long id);

	public abstract List<Defesa> listPendenciasByUsuario(Usuario usuario);

	public abstract Integer countVotosHomologacao(Defesa defesa, boolean homologado);

	public abstract boolean isVotacaoInsuficiente(Defesa defesa);

	public abstract List<Defesa> listByStatus(DefesaStatus homologado);
	
	public abstract List<Usuario> listProfessores(Defesa defesa);
	
	public abstract List<ProfessorExterno> listProfExternos(Defesa defesa);

	public abstract List<HomologacaoDefesa> listPendencias(Defesa defesa);

	/**
	 * Retorna a quantidade total de votos da defesa. Soma todos, os respondidos e os não respondidos
	 * @param defesa
	 * @return total - Integer
	 */
	public abstract Integer countTotalVotos(Defesa defesa);

	public abstract HibernateQueryPagedList<Defesa> paginarByKeyAndStatusList(String keyword,
			List<DefesaStatus> statusAceitaveisDefesa);

}